package 尚硅谷多线程1;
/*
* 使用同步方法解决实现Runnable接口的线程安全问题
* 关于同步方法的总结：
 * 1. 同步方法仍然涉及到同步监视器，只是不需要我们显示声明。
 * 2. 非静态的同步方法，同步监视器是： this
 * 3. 静态的同步方法，同步监视器是： 当前类本身
* */
 class Window4 implements Runnable {

    private int ticket=1000;
    @Override
    public void run() {
        while(true){
        show();
        }
    }
    private synchronized void show(){//同步方法 自动调用this锁
        //注意关闭软件的run()
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if (ticket > 0) {
            System.out.println(Thread.currentThread().getName() + "卖票 票号" + ticket);
            --ticket;
        }
    }
    }

public class Runnabletongbu {
    public static void main(String[] args) {
        Window4 w4 = new Window4();

        Thread thread1=new Thread(w4);
        Thread thread2=new Thread(w4);
        Thread thread3=new Thread(w4);
        thread1.setName("线程一");
        thread2.setName("线程二");
        thread3.setName("线程三");
        thread1.start();
        thread2.start();
        thread3.start();


    }
}

